

fn main() {
    // #![crate_attribute]  //应用于整个crate
    // #[crate_attribute]  //应用于模块、项目

    /*
        功能：
            1.编译条件   cfg  eg: #[cfg(target_os = "linux")]  #[cfg(not(target_os = "linux"))]
            2.设置crate名称，版本，类型（lib/bin）  eg:#![crate_type = "lib"]  #![crate_name = "rary"]
            3.禁用警告   eg:#[allow(dead_code)]
            4.启用编译器功能（宏、全局导入等）
            5.连接到外部库
            6.将函数标记为单元测试
            7.标记将成为基准的函数
        语法：
        #[attribute = "value"]
        #[attribute(key = "value")]
        #[attribute(value)]

        demo:
            #[attribute(value, value2)]

            #[attribute(value, value2, value3,
                        value4, value5)]


    */
    // linux系统编译下面函数
    #[cfg(target_os = "linux")]
    fn are_you_on_linux() {
        println!("You are running linux!");
    }

    // 非linux系统，编译以下函数
    #[cfg(not(target_os = "linux"))]
    fn are_you_on_linux() {
        println!("You are *not* running linux!");
    }

    are_you_on_linux();

    // cfg!宏， 返回true/false, 方便判断
    println!("Are you sure?");
    if cfg!(target_os = "linux") {
        println!("Yes. It's definitely linux!");
    } else {
        println!("Yes. It's definitely *not* linux!");
    }


    // 自定义属性
    #[cfg(custom)]
    fn conditional_function() {
        println!("condition met!");
    }

    // conditional_function();
    // $ rustc --cfg custom main.rs && ./main

}
